package algorithm.middle;

import org.omg.CORBA.ARG_IN;

import java.util.*;
import java.util.stream.IntStream;

/**
 * @BelongsProject: LeetCode
 * @BelongsPackage: algorithm.middle
 * @Author: 江岸
 * @CreateTime: 2021-04-12 23:26
 * @Description:给定一组非负整数 nums，重新排列每个数的顺序（每个数不可拆分）使之组成一个最大的整数。
 *
 * 注意：输出结果可能非常大，所以你需要返回一个字符串而不是整数。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：nums = [10,2]
 * 输出："210"
 * 示例 2：
 *
 * 输入：nums = [3,30,34,5,9]
 * 输出："9534330"
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/largest-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class LargestNumber179 {

    public static void main(String[] args) {
        String s = new LargestNumber179().largestNumber(new int[]{0,0});
        System.out.println(s);
    }
    public  String largestNumber(int[] nums) {
        ArrayList<String> list = new ArrayList<>();
        for (int x:nums) list.add(String.valueOf(x));
        list.sort((o1, o2) -> {
            //先把最大的第一位数取到
            if (o1.charAt(0) != o2.charAt(0)){
                return o2.charAt(0)-o1.charAt(0);
            }
            String a = o1+o2;
            String b = o2+o1;
            //两等长字符串比较
            return b.compareTo(a);
        });
        if (list.get(0).charAt(0)=='0') return "0";
        StringBuilder stringBuilder = new StringBuilder();
        for (String x:list) stringBuilder.append(x);
        return stringBuilder.toString();
    }
}
